1:      KLASSER I C++ 

class, public, private, konstruktor, funktionspolymorfism,

destruktor, initieringslista, implicit anrop.

Implementering av klassen Koordinat

#include <cstdlib>
#include <iostream>
using namespace std;

class Koordinat
{
public:
  // konstruktor
 Koordinat (float X, float Y) { m_X = X; m_Y = Y; };

// OBS konstruktor annat sätt, med initieringslista
//
Koordinat (float X, float Y):m_X (X), m_Y (Y){}

// metoder för att komma åt medlemmar

float getX () { return m_X; };
float getY () { return m_Y; };
void setX (float X) { m_X = X; };
void setY (float Y) { m_Y = Y; };

private:
 // medlemmar
 float m_X;
float m_Y;
};
//================================

int main( )
{
 Koordinat origo(0,0);
 cout<<"Koord x "<<origo.getX()<<" Koord y "<<origo.getY();
 cout<<endl;

 system("PAUSE");
 return EXIT_SUCCESS;
}

public: Allt som deklareras under public: kan kommas åt och manipuleras av vem som helst

private -(dataskydd): Klassen kan skydda sin data. Allt som deklareras under private:
är oåtkomligt utanför klassen d.v.s direktåtkomst är inte möjlig-privata variabler kan vara åtkomliga genom publika metoder

konstruktor: En metod utan returtyp och med samma namn som klassen kallas för konstruktor.
Den anropas när ett objekt av den aktuella klassen skapas.
Det kan finnas ingen, en eller flera konstruktorer. ( kompilatorn
skapar automatiskt en tom konstruktorn om ingen definieras).

Konstruktorn i koden ovan skulle också kunna skrivas med s.k initieringslista:

Koordinat (float X, float Y):m_X (X), m_Y (Y){}

Flera konstruktorer är alltså tillåtna genom s.k. funktionsöverlagring eller funktionspolymorfism.

Det går alltså att definiera olika funktioner med samma namn så länge de har olika argumentlistor (parameterlistor).



Koordinat (float X, float Y) { m_X = X; m_Y = Y; };

Koordinat () { m_X = 0; m_Y = 0; };

När konstruktorn anropas undersöker systemet om det finns någon konstruktor som passar in.

När konstruktorn egentligen inte gör annat än kopierar givna parametrar till datamedlemmar är det enklare
att använda en Initieringslista: Direkt efter parentesen placeras ett : (kolon) man räknar därefter upp de
medlemmar som skall initialiseras och inom parentesen de värden de skall få.

Destruktor
I C++ kan man (bör man) definiera en medlemsfunktion som anropas automatiskt innan ett objekt försvinner.
Denna kallas för klassens destruktor. Om vi definierar denna funktion kan vi se till att objekten avinitieras på rätt sätt.
Vi kan t.ex. behöva frigöra minnesresurser eller på något sätt notera att objektet försvinner.
En destruktor är en funktion som har samma namn som klassen men med prefixet ~ (tilde).

~Koordinat ( ){};

~Koordinat ( )
{
cout<<”Notera att jag försvinner!!”<<endl
};

Destruktorn anropas alltid implicit (automatiskt – underförstått – i det fördolda).